/**
 * 
 */
package jmine.tec.report.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import jmine.tec.report.DataRow;
import jmine.tec.report.cell.DataCell;

/**
 * Classe utilitaria para agrupar carteiras
 * 
 * @author takeshi
 */
public final class DataRowGroup {

    /**
     * 
     */
    private DataRowGroup() {
    }

    /**
     * Agrupa as linhas pelo {@link DataCell} dado pelo indice passado
     * 
     * @param <E> o tipo das linhas
     * @param indice int o indice
     * @param rows as linhas
     * @return {@link Map}
     */
    public static <E extends DataRow> Map<DataCell, List<E>> agrupaPor(final int indice, final List<E> rows) {
        Map<DataCell, List<E>> results = new HashMap<DataCell, List<E>>();
        for (E e : rows) {
            DataCell cell = e.getCell(indice);
            List<E> list = results.get(cell);
            if (list == null) {
                list = new ArrayList<E>();
                results.put(cell, list);
            }
            list.add(e);
        }
        return results;
    }

    /**
     * Agrupa as linhas pelo {@link DataCell} dado pelo indice passado
     * 
     * @param <E> o tipo das linhas
     * @param indice int o indice
     * @param rows as linhas
     * @return {@link Map}
     */
    public static <E extends DataRow> Map<DataCell, List<E>> agrupaPor(final int indice, final E... rows) {
        return agrupaPor(indice, Arrays.asList(rows));
    }

}
